﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace FaceAppClient.FaceModel
{
    public class DetectModel
    {
        public uint result_num;//人脸数目
        public dResult[] result;//人脸属性对象的集合
        public UInt64 log_id;//日志id
    }

    public class dResult
    {
        public double age;//年龄
        public double beauty;//颜值
        public Location location;//人脸在图片中的位置
        public double face_probability;//人脸置信度，范围0-1
        public int rotation_angle;//人脸框相对于竖直方向的顺时针旋转角，[-180,180]
        public double yaw;//三维旋转之左右旋转角[-90(左), 90(右)]
        public double pitch;//三维旋转之俯仰角度[-90(上), 90(下)]
        public double roll;//平面内旋转角[-180(逆时针), 180(顺时针)]
        public uint expression;//表情，0，不笑；1，微笑；2，大笑。face_fields包含expression时返回
        public double expression_probability;//	表情置信度，范围0~1。face_fields包含expression时返回
        public FaceShape[] faceshape;//脸型置信度。face_fields包含faceshape时返回
        public string gender;//male、female。face_fields包含gender时返回
        public double gender_probability;//性别置信度，范围0~1。face_fields包含gender时返回
        public uint glasses;//是否带眼镜，0-无眼镜，1-普通眼镜，2-墨镜。face_fields包含glasses时返回
        public double glasses_probability;//眼镜置信度，范围0~1。face_fields包含glasses时返回
        public LandMark[] landmark;//4个关键点位置，左眼中心、右眼中心、鼻尖、嘴中心。face_fields包含landmark时返回
        public LandMark72[] landmark72;//72个特征点位置，示例图 。face_fields包含landmark时返回
        public string race;//	yellow、white、black、arabs。face_fields包含race时返回
        public double race_probability;//人种置信度，范围0~1。face_fields包含race时返回
        public Qualities qualities;//人脸质量信息。face_fields包含qualities时返回
    }

    public class Location
    {
        public uint left;//	人脸区域离左边界的距离
        public uint top;//人脸区域离上边界的距离
        public uint width;//人脸区域的宽度
        public uint height;//	人脸区域的高度
    }

    public class FaceShape{
        public string type;//脸型：square/triangle/oval/heart/round
        public double probability;//置信度：0~1
    }

    public class LandMark {
        public double x;
        public double y;
    }

    public class LandMark72
    {
        public double x;
        public double y;
    }

    public class Qualities
    {
        public Occlusion occlusion;//人脸各部分遮挡的概率,[0, 1],0表示完整，1表示不完整
        public double blur;//人脸模糊程度，[0, 1]。0表示清晰，1表示模糊
        public double illumination;//取值范围在[0,255],表示脸部区域的光照程度
        public double completeness;//	人脸完整度，0或1, 0为人脸溢出图像边界，1为人脸都在图像边界内
        public Type type;//真实人脸/卡通人脸置信度
    }

    public class Occlusion
    {
        public double left_eye;//左眼
        public double right_eye;//右眼
        public double nose;//鼻子
        public double mouth;//嘴巴
        public double left_check;//左脸颊
        public double right_check;//右脸颊
        public double chin;//下巴
    }

    public class Type
    {
        public double human;
        public double cartoon;
    }
}
